/*
 * @lc app=leetcode.cn id=494 lang=javascript
 *
 * [494] 目标和
 */

// @lc code=start
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var findTargetSumWays = function (nums, target) {
  //  该方案使用递归回溯的方式，
  // 1. 递归参数为: index 当前处理元素索引 sum 当前处理后的结果
  // 2. 单层搜索的逻辑: 索引+1 sum加当前元素
  // 3. 递归截止条件: index === nums.length 即处理完所有元素时
  let result = 0;
  const _findTargetSumWays = (index, sum) => {
    if (index === nums.length) {
      if (target === sum) {
        result++;
      }
    } else {
      _findTargetSumWays(index + 1, sum + nums[index]);
      _findTargetSumWays(index + 1, sum - nums[index]);
    }
  };
  _findTargetSumWays(0, 0);
  return result;
};
// @lc code=end
